/*
 * LoginInterfaz.h
 *
 *  Created on: 18/11/2013
 *      Author: fernando
 *
 *      Esta clase se encarga de manejar el login del usuario
 */

#ifndef LOGININTERFAZ_H_
#define LOGININTERFAZ_H_

#include "StringInput.h"
#include "SDL.h"
#include "jsoncpp/json/json.h"
#include "../../Common/Conexion.h"
#include "Lobby.h"
#include "../../Common/mensaje.h"
#include <gtkmm.h>

class LoginInterfaz : public SDL {
public:
	//Constructor que recibe un stream para comunicarse con el server.
	explicit LoginInterfaz(Conexion* stream, const Gtk::Main& kit);
	virtual ~LoginInterfaz();
	//Inicia la pantalla de login.
	void logInit();
	//Ubica el mouse segun su posicion en la pantalla
	void ubicarMouse(unsigned int x, unsigned int y);
	//Dibuja la pantalla de login
	void dibujar();
	//Maneja los ingresos por teclado
	void handleInput(SDL_Event&);
	//Maneja los clicks realizados con el mouse
	bool handleClick();
	//Pide al usuario que ingrese sus datos de conexion
	bool pedirLogin();
	//Arma un mensaje json con los datos obtenidos
	Json::Value getJSonValues();
	//Envia los datos al servidor
	bool enviarDatos();
	//Muestra una pantalla que informa que los datos
	//ingresados no son correctos
	void mostrarDatosIncorrectos();
	//Muestra una pantalla que informa que el usuario con el cual se tratan
	//de registrar ya existe
	void mostrarUsuarioExistente();
	//Devuelve si se pudo loguear en forma exitosa
	bool logueoExitoso();
	//Pasa a la pantalla de espera de oponentes
	void pasarAEspera();
	//obtiene el pass del usuario
		std::string getPass();
	//devuleve un json con la operacion que se enviara al server
	Json::Value mostrarLobby();
	bool loguear();
	void reconnect(Conexion* sd);
	
private:
	//Permite indicar si se ingresa usuario o contraseña por teclado
	void setIngresaUsuario();
	//Permite indicar si se loguea o es un usuario nuevo
	void setIngresaOpcion();
	//Pasa a la pantalla inicial
	void pasarAInicial();
	//Pasa a la pantalla de logueo
	void pasarALogin();
	SDL_Surface* fondo;
	StringInput* user;
	StringInput* pass;
	Gtk::Main kit;
	unsigned int posXMouse;
	unsigned int posYMouse;
	bool ingresaUsuario;
	bool pantallaInicial;
	bool opcion;//true: logueo, false: registro
	Conexion* stream;
	bool success;
};

#endif /* LOGININTERFAZ_H_ */
